<?php

namespace App\Admin\Models;

use App\Admin\Models\BaseModel;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\MessageBag;
use Ixudra\Curl\Facades\Curl;
use Encore\Admin\Facades\Admin;
use DB;
use App\Services\Store;

class ShareBonus extends BaseModel
{
    protected $table = 'share_bonus';
    //指定主键
    protected $primaryKey = 'sbId';
    
    public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)
    {
        $perPage = Request::get('per_page', 20);

        $page = Request::get('page', 1);

        $start = ($page-1)*$perPage;

		///////获取数据//////////////////////////////////////////////////////////////////////////////////////
//		$remarkKey = config('services.extend.remarkKey');
//		$remarkHost = config('services.extend.remarkHost');
//		$url = $remarkHost.'/api/remark/getTags/'.$remarkKey.'/0/1';
//		$url = $url."?start=$start&count=$perPage";
//		
//		// 传递url参数
////		$queryFilters = $_GET;
//		foreach($_GET as $key => $value){
//			if ($key != '_pjax'){
//				$url = $url.'&'.$key.'='.$value;
//			}
//		}
//		Log::info('RemarkTag paginate url:'.$url);
//		// 请求外部数据
//		$Functions = new Functions();
//		$data = $Functions->Get($url);

		$sId = Admin::user()->sId;

		$infoList = DB::table('share_bonus')
						->selectRaw('*, sbShareMoney+sbTransferMoney AS totalProfit')
						->where('sId', $sId)
						->orderBy('sbMonth', 'DESC')
						->offset($start)
        				->limit($perPage)
						->get();
		$infoList = json_decode(json_encode($infoList), true);
		
		for($i=0;$i<count($infoList);$i++){
			$logList = DB::table('share_log')
						->leftJoin('admin_users', 'share_log.auCode', 'admin_users.auCode')
						->where('share_log.sId', $sId)
						->where('share_log.sbMonth', $infoList[$i]['sbMonth'])
						->get();
			$infoList[$i]['logList'] = $logList;
		}
		////////获取数据/////////////////////////////////////////////////////////////////////////////////////

		$total = count($infoList);
		
        extract($infoList);

        $tags = static::hydrate($infoList);

        $paginator = new LengthAwarePaginator($tags, $total, $perPage);

        $paginator->setPath(url()->current());

        return $paginator;
    }

    public static function with($relations)
    {
        return new static;
    }
    
    /**
     * Add a basic where clause to the query.
     *
     * @param  string|array|\Closure  $column
     * @param  mixed   $operator
     * @param  mixed   $value
     * @param  string  $boolean
     * @return $this
     */
    public function where($column, $operator = null, $value = null, $boolean = 'and'){
    	// http://localhost:96/admin/remark/remarkTag?rtcId=1
    	// $column rtcId
    	// $operator 1
    	// $value null
    	// $boolean and
    	return $this;
    }
    
    // 获取单项数据展示在form中
	public function findOrFail($id)
	{
		$url = $this->host."/store/get/{$id}";
		$response = Curl::to($url)->get();
		$data = $this->handelApiData($response);
	
	    return static::newFromBuilder($data);
	}
	
	// 保存提交的form数据
	public function save(array $options = Array())
	{
		
	    $attributes = $this->getAttributes();
	    
	    $userName = Admin::user()->name;
	    $now = date('Y-m-d H:i:s', time());
	    
	    // 根据是否有id判断添加还是更新
	    if (isset($attributes['sbId'])){
	    	$error = new MessageBag([
		        'title'   => '系统错误',
		        'message' => '不可编辑',
		    ]);

		    return back()->with(compact('error'));
	    }
		
		$sId = Admin::user()->sId;
		$userName = Admin::user()->name;
		$Store = new Store();
		$result = $Store->shareBonus($sId, $attributes['sbMonth'], $attributes['sbTransferMoney'], $userName);
		if ($result !== true){
			$error = new MessageBag([
		        'title'   => '错误',
		        'message' => $result,
		    ]);

		    return back()->with(compact('error'));
		}
	}

	// 重写此方法，因为删除前要调用。不写则报错
	public function find($id){
		$this->sId = $id;
		return $this;
	}

	// 重写删除方法
	public function delete(){
		
		$attributes = $this->getAttributes();
		
		$remarkKey = config('services.extend.remarkKey');
		$remarkHost = config('services.extend.remarkHost');
		$url = $remarkHost.'/api/remark/delTag';
		
		// 请求外部数据
		$Functions = new Functions();
		$attributes['rcKey'] = $remarkKey;

		$data = $Functions->Post($url, $attributes);
		$data = json_decode($data, true);
		if (!isset($data['code'])){
			$error = new MessageBag([
		        'title'   => '系统错误',
		        'message' => '',
		    ]);
		
		    return back()->with(compact('success'));
		}
		if ($data['code'] == 0){
			// 抛出错误信息
			$this->saving(function ($form) {
			
			    $error = new MessageBag([
			        'title'   => '保存失败',
			        'message' => $data['msg'],
			    ]);
			
			    return back()->with(compact('error'));
			});
		}else{
			// 抛出错误信息
			$this->saving(function ($form) {
			
			    $error = new MessageBag([
			        'title'   => '保存成功',
			        'message' => $data['msg'],
			    ]);
			
			    return back()->with(compact('success'));
			});
		}
		
		return $this;
	}
	
//	// 设置logo_url属性重写  提交信息时进入此方法
//	public function setLogoUrlAttribute($pictures)
//	{
////	    if (is_array($pictures)) {
////	        $this->attributes['pictures'] = json_encode($pictures);
////	    }
//	}
//	
//	// 获取logo_url属性重写 获取信息时进入此方法
//	public function getLogoUrlAttribute($pictures)
//	{
//		if (is_array($pictures)){
//			return $pictures;
//		}
//	    return json_decode($pictures, true);
//	}
}
